﻿using FluentValidation;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.DependencyInjection;
using NPOI.XWPF.UserModel;

namespace EasyCore.DataValidation
{
    /// <summary>
    /// 验证器的扩展方法
    /// </summary>
    public static class EasyValidationExtensions
    {
        /*
        /// <summary>
        /// 注册所有验证器类
        /// </summary>
        /// <param name="services"></param>
        public static void AddEasyDataValidators(this IServiceCollection services)
        {
           //---------------------添加自动验证类
            services.AddFluentValidationAutoValidation(configuration =>
            {
                //禁止内置的.net模型验证
                configuration.DisableBuiltInModelValidation = true;
                //配置验证策略。验证策略 ValidationStrategy.All 支持对从 ControllerBase 继承的所有控制器进行异步自动验证。
                //验证策略 ValidationStrategy.Annotations 支持对继承自使用 [AutoValidationAttribute] 属性修饰的 ControllerBase（类或方法）的控制器进行异步自动验证。
                configuration.ValidationStrategy = ValidationStrategy.All;
                //对从 BindingSource.Body 绑定源绑定的参数（通常使用[FromBody] 属性修饰的参数）启用异步自动验证。
                configuration.EnableBodyBindingSourceAutomaticValidation = true;
                //对从 BindingSource.Form 绑定源绑定的参数（通常使用 [FromForm] 属性修饰的参数）启用异步自动验证。
                configuration.EnableFormBindingSourceAutomaticValidation = true;
                //对从 BindingSource.Query 绑定源绑定的参数（通常使用 [FromQuery] 属性修饰的参数）启用异步自动验证。
                configuration.EnableQueryBindingSourceAutomaticValidation = true;
                //对从 BindingSource.Path 绑定源绑定的参数（通常使用 [FromRoute] 属性修饰的参数）启用异步自动验证。
                configuration.EnablePathBindingSourceAutomaticValidation = true;
                //对从 BindingSource.Custom 绑定源绑定的参数启用异步自动验证。
                configuration.EnableCustomBindingSourceAutomaticValidation = true;
                //对未从任何绑定源绑定的参数（通常没有声明或推断的绑定源的参数）启用异步自动验证。
                configuration.EnableNullBindingSourceAutomaticValidation = true;
                //自定义实现结果工厂，替代缺省的工厂
                configuration.OverrideDefaultResultFactoryWith<ParameterErrorResultFactory>(); //统一结果处理
            });

            //---------------------依册注入所有的验证器
            var assemblies = AppDomain.CurrentDomain.GetAssemblies();//获得所有的程序集
            foreach (var assembly in assemblies)
            {
                services.AddValidatorsFromAssembly(assembly); //注册所有验证类
            }
        }

        public static bool Valid<T>(this T obj) {
            return false;
        
        }

        */

    }
}
